home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Internet / WWW / gform.1.1 / send_to_printer.c < prev    next >
C/C++ Source or Header  |  1996-02-10  |  1KB  |  69 lines

  1. #include <string.h>
  2.  
  3. /***
  4.  * Send buf to printer 
  5.  *
  6.  *  queue - The intended print queue.  
  7.  * buf - The data to print.
  8.  *
  9.  * returns 0 on success
  10.  *      -1 on failure.
  11.  *
  12.  ***/
  13.  
  14. #include <stdio.h>
  15. #include <unistd.h>
  16. #include <sys/wait.h>
  17. #include <errno.h>
  18.  
  19. #include "config.h"
  20.  
  21. #ifndef PRINTCMD
  22. #define PRINTCMD "/usr/bin/lpr"
  23. #endif
  24. #ifndef PRINTQ
  25. #define PRINTQ    "-P"
  26. #endif
  27. int send_to_printer(queue,buf)
  28. char *queue, *buf;
  29. {
  30.     int fd[2], pid;
  31.     FILE *f1;
  32.     char thequeue[256];
  33.  
  34. /* set child process STDIN to parent fd */
  35.     
  36.     if (pipe(fd) <0)
  37.     return(-1);    
  38.   
  39.     if ((pid = fork()) < 0)
  40.      return(-1);    
  41.     else if (pid >0) {            /* parent */
  42.     close(fd[0]);             /* close read end */
  43.     write(fd[1], buf, strlen(buf));
  44.         close(fd[1]);
  45.     if (waitpid(pid, NULL, 0) <0)
  46.         return(-1);    
  47.     return(0);
  48.     } else {        /* child */
  49.     close(fd[1]);    
  50.     if (fd[0] != STDIN_FILENO) {
  51.        if (dup2(fd[0], STDIN_FILENO) != STDIN_FILENO) 
  52.         return(-1);    
  53.        close(fd[0]);
  54.     }    /* invoke printer which expects STDIN */
  55.  
  56.     if (queue!=NULL)
  57.         sprintf(thequeue,"%s%s",PRINTQ,queue);
  58.     else
  59.         thequeue[0]=0;
  60.  
  61.         if (execl(PRINTCMD,PRINTCMD,thequeue, 0) <0) 
  62.               return(-1); 
  63.  
  64.     close(fd[0]);
  65.     exit(0);
  66.     }
  67.     return(0);
  68. }
  69.